package com.scut.filedownloader.core.interact;

/*
@Description: 被动式监听协议
虽然是准备了多个接口，但实际是使用到的却比较少，斟酌选择
 */
public interface ProgressMonitor<K,V>{


    public void onProgress(K key,V value);
    public void onFinished();
    public void onStart();  //一般在此方法调用后设置PROGRESS_STATUS为GOING
    public void onStop(ProgressState status);
    public void onPause();
    public void onResume();

    //control signal receive function

    /*
       @Description: 基于忙等的一种中断方式，允许哪些任务可以被中断，需要参考对应任务的
       监视器协议
       periodically check the function, but causes busy waiting
     */
    public boolean interruptSignal();

    /*
    @Description: 所有任务均可通过设置 丢弃信号位 来判断任务是否应该停止并结束
     */
    public boolean cancelSignal();


    public enum ProgressState {
        READY,
        GOING,
        PAUSED,
        FAILED,
        ABORTED,
        COMPLETED, //set to it when onFinished() is called
    }


}
